"""
类名：EmpApi
实例属性：emp_url，保存网址"http://ihrm-test.itheima.net/api/sys/user"
实例方法：
    def __init__(self):
        # 添加属性
    def add_emp(self, body, headers):
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
    def query_emp(self, query, headers):
        # 功能：查询指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def modify_emp(self, body, query, headers):
        # 功能：修改指定id的员工
        # :param body: 修改员工的请求体
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def delete_emp(self, query, headers):
        # 功能：删除指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
"""
import unittest
import requests

from login_api import LoginApi


class EmpApi(object):
    def __init__(self):
        self.emp_url = "http://ihrm-test.itheima.net/api/sys/user"

    def add_emp(self, body, headers):
        """
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
        """
        resp = requests.post(self.emp_url, json=body, headers=headers)
        return resp

    def query_emp(self, query, headers):
        """
        # 功能：查询指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        """
        resp = requests.get(self.emp_url + "/" + query, headers=headers)
        return resp

    def modify_emp(self, body, query, headers):
        """
        功能：修改指定id的员工
        :param body: 修改员工的请求体
        :param query: 员工的id号
        :param headers: 请求头
        :return: 响应对象
        """
        resp = requests.put(self.emp_url + "/" + query, json=body, headers=headers)
        return resp

    def delete_emp(self, query, headers):
        """
        # 功能：删除指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        """
        resp = requests.delete(self.emp_url + "/" + query, headers=headers)
        return resp


class TestEmp(unittest.TestCase):
    def test_emp(self):
        print("test_login")
        login_api = LoginApi()
        body = {
            "mobile": "13800000002",
            "password": "123456"}
        au_headers = login_api.get_au_headers(body)
        print(f"au_headers={au_headers}")

        emp_api = EmpApi()
        body = {"mobile": "11144443333",
                "username": "大头儿子",
                "timeOfEntry": "2021-11-01",
                "workNumber": "123345555666",
                "departmentId": "1452451023720382464",
                "correctionTime": "2021-11-29T16:00:00.000Z"}

        resp = emp_api.add_emp(body, au_headers)
        json_data = resp.json()
        print(f"增加员工的结果：{json_data}")

        self.assertEqual(200, resp.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("成功", json_data.get("message"))

        # 每次操作前，先删除手机号，保证能插入成功
        emp_id = json_data.get('data').get('id')
        print(f"新增的员工id为{emp_id}")
        resp = emp_api.query_emp(emp_id, au_headers)
        json_data = resp.json()
        print(f"查询员工的结果：{json_data}")

        self.assertEqual(200, resp.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("成功", json_data.get("message"))

        body = {"username": "今天真是弯弯绕绕的一天呢"}
        resp = emp_api.modify_emp(body, emp_id, au_headers)
        json_data = resp.json()
        print(f"修改员工的结果：{json_data}")

        self.assertEqual(200, resp.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("成功", json_data.get("message"))

        resp = emp_api.delete_emp(emp_id, au_headers)
        json_data = resp.json()
        print(f"删除员工的结果：{json_data}")

        self.assertEqual(200, resp.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("成功", json_data.get("message"))
